localeconv関数は、現在のロケールの数値書式に関する詳細情報を取得します。
この情報は、lconv型の構造体に格納されます。
#include <locale.h>
struct lconv *localeconv( void );
引数はありません。
戻り値として、lconv型の構造体のポインタが返されます。
このポインタの指すメモリは関数内で確保されるため、実体を準備する必要はありません。
lconv型の構造体のメンバを以下に記載します。
これらの値は、以降の処理で書き換えられる可能性があるため、直接変更しないでください。
| char *decimal_point | 通貨以外の数値で使用する小数点の文字 |
|---|---|
| char *thousands_sep | 通貨以外の数値で使用する整数部の桁を区切る文字 |
| char *grouping | 通貨以外の数値の区切りを入れる桁数を示す値の入った配列
以下の値をとります。 「CHAR_MAX」: 区切りをいれません。 「0」: 残りの各桁の区切りは直前の要素の桁数を使用します。 「n」(1以上): 区切りを入れる桁数。 |
| char *int_curr_symbol | 国際通貨記号
以下の規則に則って解釈します。 ・最初の3文字は、ISO4217規格で定義されている英字の国際通貨記号 ・4番目の文字(NULL文字の直前にある文字)は、国際通貨記号と通貨値を区切る記号 |
| char *currency_symbol | 通貨記号 |
| char *mon_decimal_point | 通貨で使用する小数点の文字 |
| char *mon_thousands_sep | 通貨で使用する整数部の数字の桁を区切る文字 |
| char *mon_grouping | 通貨の区切りを入れる桁数を示す値の入った配列
以下の値をとります。 「CHAR_MAX」: 区切りをいれません。 「0」: 残りの各桁の区切りは直前の要素の桁数を使用します。 「n」(1以上): 区切りを入れる桁数。 |
| char *positive_sign | 0及び正の通貨値の、符号を示す文字列 |
| char *negative_sign | 負の通貨値の、符号を表す文字列 |
| char int_frac_digits | 国際的な通貨書式の小数部の桁数 |
| char frac_digits | 通貨書式の小数部の桁数 |
| char p_cs_precedes | 通貨記号が、
0及び正の通貨値の前にある場合は「1」 0及び正の通貨値の後ろにある場合は「0」 |
| char p_sep_by_space | 通貨記号と0及び正の通貨値が、
空白で区切られている場合は「1」 空白で区切られていない場合は「0」 |
| char n_cs_precedes | 通貨記号が、
負の通貨値の前にある場合は「1」 負の通貨値の後ろにある場合は「0」 |
| char n_sep_by_space | 通貨記号と負の通貨値が、
空白で区切られている場合は「1」 空白で区切られていない場合は「0」 |
| char p_sign_posn | 0及び正の通貨書式の符号の位置
以下の値をとります。 「0」: 数値と通貨記号をかっこで囲む 「1」: 符号文字列が、数値と通貨記号の前にある 「2」: 符号文字列が、数値と通貨記号の後ろにある 「3」: 符号文字列が、通貨記号の直前にある 「4」: 符号文字列が、通貨記号の直後にある |
| char n_sign_posn | 負の通貨書式の符号の位置
以下の値をとります。 「0」: 数値と通貨記号をかっこで囲む 「1」: 符号文字列が、数値と通貨記号の前にある 「2」: 符号文字列が、数値と通貨記号の後ろにある 「3」: 符号文字列が、通貨記号の直前にある 「4」: 符号文字列が、通貨記号の直後にある |
※char * 型メンバは文字ではなく文字列へのポインタです。また、char *decimal_point以外で ” に等しいメンバは、長さが0か、現在のロケールでサポートされていないものです。
※構造体の char型メンバは、0以上の数値を表しますが、CHAR_MAXと等しいメンバがあった場合、そのメンバは現在のロケールでサポートされていないことを示しています。
プログラム 例
#include <stdio.h>
#include <locale.h>
int main(void)
{
char *loc;
struct lconv *stLc;
/* ロケール情報を'jpn'(日本)に設定し、取得 */
loc = setlocale(LC_ALL, 'jpn');
printf('locale = %sn', loc);
/* ロケールに関する詳細情報を取得 */
stLc = localeconv();
printf(' decimal_point = %sn', stLc->decimal_point);
printf(' thousands_sep = %sn', stLc->thousands_sep);
printf(' grouping[0] = %dn', stLc->grouping[0]);
printf(' grouping[1] = %dn', stLc->grouping[1]);
printf(' int_curr_symbol = %sn', stLc->int_curr_symbol);
printf(' currency_symbol = %sn', stLc->currency_symbol);
printf(' mon_decimal_point = %sn', stLc->mon_decimal_point);
printf(' mon_thousands_sep = %sn', stLc->mon_thousands_sep);
printf(' mon_grouping[0] = %dn', stLc->mon_grouping[0]);
printf(' mon_grouping[1] = %dn', stLc->mon_grouping[1]);
printf(' positive_sign = %sn', stLc->positive_sign);
printf(' negative_sign = %sn', stLc->negative_sign);
printf(' int_frac_digits = %dn', stLc->int_frac_digits);
printf(' frac_digits = %dn', stLc->frac_digits);
printf(' p_cs_precedes = %dn', stLc->p_cs_precedes);
printf(' p_sep_by_space = %dn', stLc->p_sep_by_space);
printf(' n_cs_precedes = %dn', stLc->n_cs_precedes);
printf(' n_sep_by_space = %dn', stLc->n_sep_by_space);
printf(' n_sign_posn = %dn', stLc->n_sign_posn);
printf('n');
/* ロケール情報を'us'(米国)に設定し、取得 */
loc = setlocale(LC_ALL, 'us');
printf('locale = %sn', loc);
/* ロケールに関する詳細情報を取得 */
stLc = localeconv();
printf(' int_curr_symbol = %sn', stLc->int_curr_symbol);
printf(' currency_symbol = %sn', stLc->currency_symbol);
/* 他メンバは抜粋します */
return 0;
}
例の実行結果
> localeconv.exe locale = Japanese_Japan.932 decimal_point = . thousands_sep = , grouping[0] = 3 grouping[1] = 0 int_curr_symbol = JPY currency_symbol = mon_decimal_point = . mon_thousands_sep = , mon_grouping[0] = 3 mon_grouping[1] = 0 positive_sign = negative_sign = - int_frac_digits = 2 frac_digits = 0 p_cs_precedes = 1 p_sep_by_space = 0 n_cs_precedes = 1 n_sep_by_space = 0 n_sign_posn = 3 locale = English_United States.1252 int_curr_symbol = USD currency_symbol = $
※Windows環境でのみ動作確認しております。LINUX環境などでは動作が異なる場合がありますので、その場合は環境に合わせてカスタマイズしてください。
Copyright © 2011 katsumi Handa All Rights Reserved.